יש לי טבלה שבה מאוחסנים הפוסטים, יש בטבלה עמודה בשם CAT ששם אני מכניס מספר בשביל להגדיר לפוסט קטגוריה. לדוגמא המספר1 מסמל צד שרת, והמספר2 מסמל צד לקוח.

עכשיו אני רוצה לשלוף בדף הראשי שבאתר 3 שורות מכל קטגוריה, ואני רוצה שזה יהיה בצורה יעילה.
כי אפשר להשתמש בUNION, אבל מה קורה שיש לי 10 קטגוריות(כמו ב WALLA).. אז זה כבר UNIOU לא נראה יעיל במיוחד.

איך לשלוף?

נ.ב. אני מחפש על זה המון ועדיין לא מצאתי משהו.

13 תשובות

avatar ענה intval ב 02 למאי 2012 #

SELECT x.*
  FROM (SELECT t.*,
               CASE
                 WHEN @category != t.cat THEN @rownum := 1
                 ELSE @rownum := @rownum + 1
               END AS rank,
               @category := t.cat AS var_category
          FROM TABLENAME t
          JOIN (SELECT @rownum := NULL, @category := '') r
      ORDER BY cat) x
 WHERE x.rank <= 3


avatar ענה intval ב 02 למאי 2012 #

זה מה שצריך לשנות בשאילת:

SELECT x.*
FROM (SELECT t.*,
CASE
WHEN @category != t.cat THEN @rownum := 1
ELSE @rownum := @rownum + 1
END AS rank,
@category := t.cat AS var_category
FROM TABLENAME t
JOIN (SELECT @rownum := NULL, @category := '') r
ORDER BY cat ASC, date DESC) x
WHERE x.rank <= 3="">

avatar ענה משתמש_193187 ב 03 למאי 2012 #

הקוד לא מובן.
תוכל קצת להסביר ?

avatar ענה משתמש_193981 ב 03 למאי 2012 #

איזה חלק של הקוד לא מובן ?

avatar ענה iiddaannyy ב 03 למאי 2012 #

הסבר: http://www.fxp.co.il/showthread.php?t=10302987&page=2

avatar ענה משתמש_193187 ב 03 למאי 2012 #

עניתי לך שם.
וגם פה אני יכתוב קטע קטן: אין אפשרות אחרת לשלוף?
חייבים רק ככה?

אני מחפש דרך אחרת מומלצת-לפחות עד שאהיה מומחה יותר

avatar ענה משתמש_193981 ב 03 למאי 2012 #

ניסית לעשות שליפה בלולאה ?

avatar ענה משתמש_193187 ב 03 למאי 2012 #

זה בדיוק הבעייה, אני משתמש בלולאה. אבל איך לעשות שהיא תשלוף מכל קטגוריה את ה3 שורות האחרונות שלה

avatar ענה משתמש_193981 ב 03 למאי 2012 #

לעבור על כל קטגוריה ולבצע שאילת של שליפת שלוש הרשומות האחרונות עבור אותה קטגוריה.
איזה שאילתה אתה לא יכול לכתוב? את זאת ששולפת את כל הקטגוריות או את זאת ששולפת 3 שורות עבור קטגוריה מספר 2 ?

avatar ענה משתמש_218805 ב 20 למאי 2012 #

שלום
אני לא ככ טוב עדיין כדי להבין את זה לגמרי.

תכלס לא ככ הבנתי איך לשבץ פה את השאילתה שלי.

מישהו יכול בבקשה לעזור לי עם כתיבת השאילתה שלי.

אם לטבלה שלי קוראים ART ויש לי קטגוריות בשם PAINT ו- DROW ואני רוצה לשלוף מכל אחד את 5 הפוסטים האחרונים.

אז מה הקוד שאני צריך??


תודה רבה
אVי

avatar ענה intval ב 20 למאי 2012 #

איך קוראים לעמודה של הקטגוריות ?

avatar ענה משתמש_214319 ב 23 למאי 2012 #

בידיוק הייתה לי אותה בעיה שרציתי לשלוף משהו ...
מצאתי פתרון יעיל ומהיר

WITH tmp AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY art.id ORDER BY art.id) AS 'RowNo', art.paint,art.draw
)
SELECT  * FROM tmp WHERE RowNo <= 5

avatar ענה intval ב 23 למאי 2012 #

כן... postgresql הרבה יותר טוב מ mysql